iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 25
0
AI & Data

Machine Learning系列 第 25

Day25 - Feature Engineering -- 11. Aggregating Transaction Data(合計異動資料)

  • 分享至 

  • xImage
  •  

11. Aggregating Transaction Data(合計異動資料)

異動資料(Transaction data)顧名思義是指來自交易等異動的資料。例如:店家會登記商店裡每一筆銷售的資料;我們會登記銀行帳戶每月的餘額。為了用這些異動資料來預測靜態的結果,我們通常會加總這些變數成靜態的觀點(view)。一般的做法是先決定一個時間視窗(time window),例如最近六個月,然後找出這些交易的總合計、最大交易量、最小交易量等。

Aggregating

以下圖資料為例,使用pandas,統計每個使用者使用次數和使用時間總和。
https://ithelp.ithome.com.tw/upload/images/20200925/20129584ycinAOwg4Q.jpg
圖片來源:www.slideshare.net/gabrielspmoreira/feature-engineering-getting-most-out-of-data-for-predictive-models-tdc-2017

data = pd.read_csv('../input/sample10.csv')
data

/|Content| Genre| Duration| Play Time| User| Device
------------- | -------------
0| Highway star| Rock| 190| 2015/6/12 04:29 |User001| TV
1| Blue alive| Blues| 281| 2015/6/13 12:31 |User005 |Tablet
2| Lonely Planet| Techno| 332| 2015/6/13 18:12| User003| TV
3| Dance, dance| Disco| 312| 2015/6/13 18:12| User001 |Tablet
4| The wall| Reagge| 218 |2015/6/14 21:29 |User002 |Smartphone
5| Offside down| Techno| 240| 2015/6/14 16:29| User005| Tablet
6| The alchemist| Blues| 418| 2015/6/14 16:29| User003| TV
7| Bring me down| Classic| 328| 2015/6/15 16:29| User001| Tablet
8| The scarocrow| Rock| 269| 2015/6/15 16:29| User003| Smartphone

檢視使用者數目:

print('Number of users: {}'.format(data['User'].nunique()))

Number of users: 4

顯示每個使用者使用次數:

data.groupby('User')['Play Time'].count()

User|
------------- | -------------
User001 | 3
User002| 1
User003 | 3
User005 | 2
Name: Play Time, dtype: int64

使用pandas彙總使用者資料:

# 要使用的統計功能
operations = ['count','max', 'min', 'mean','sum']
# 欄位名稱
feature_names = ['NumPlaybacks', 'max_Time', 'min_Time', 'mean_Time','Total Time']

df = pd.DataFrame()
    
df[feature_names] = data.groupby('User')['Duration'].agg(operations)
df

/|NumPlaybacks| max_Time| min_Time| mean_Time| Total Time
------------- | -------------
User001 |3| 328| 190| 276.666667| 830
User002| 1| 218| 218| 218.000000| 218
User003| 3| 418| 269 |339.666667| 1019
User005| 2| 281| 240| 260.500000| 521

Pivoting

Pivoting()是選取一個變數,並把它下面的不同值設定為新的欄位,再對這些新欄位進行彙總計算。
https://ithelp.ithome.com.tw/upload/images/20200925/2012958441Pd8B03YA.jpg
圖片來源:www.slideshare.net/gabrielspmoreira/feature-engineering-getting-most-out-of-data-for-predictive-models-tdc-2017

讓我們選取"Device"這個欄位。

print('Number of devices: {}'.format(data['Device'].nunique()))

Number of devices: 3

統計使用者使用這些新欄位(各種Device)使用的時間:

data.pivot_table(index='User', columns='Device',
                 values='Duration', aggfunc=np.sum, fill_value = 0)

Device | Smartphone | TV | Tablet
------------- | -------------
User | | |
User001 |0 |190 | 640
User002 |218 | 0 |0
User003 | 269 | 750 | 0
User005 | 0 | 0 | 521

統計使用者使用這些新欄位(各種Device)使用的次數:

df_p = data.pivot_table(index='User', columns='Device',
                 values='Play Time', aggfunc='count', fill_value = 0)

Device|Smartphone |TV| Tablet
------------- | -------------
User| | |
User001| 0| 1 |2
User002| 1| 0| 0
User003| 1| 2| 0
User005| 0| 0| 2

接下來我們可以將這些資料merge,進行機器學習。


上一篇
Day24 - Feature Engineering -- 10. Feature Creation
下一篇
Day26 - Feature Engineering -- 12. Temporal features(時間的特徵)和Spatial Features(空間特徵)
系列文
Machine Learning32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言